/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.persists;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Класс для простых справочников. Используется когда в таблице БД есть ссылка на другую таблицу (внешний ключ).
 * Для отображения таких полей на экране, нужна строка, описывающая объект по его id. 
 * @author alex
 */
public class SimpleDirItem {
	private int id;
	private String name;
	private String table;

	public String getTable() {
		return table;
	}

	/**
	 *
	 * @param pId - id объекта
	 * @param pName - его строковое представление
	 */
	public SimpleDirItem(int pId, String pName, String pTable){
		id=pId;
		name = pName;
		table = pTable;
	}
	
	/**
	 * Меняем id
	 * @param id - новый идентификатор объекта
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Меняем строку
	 * @param name - новое описание объекта
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 *
	 * @return id объекта
	 */
	public int getId() {
		return id;
	}

	/**
	 *
	 * @return описание объекта
	 */
	public String getName() {
		return name;
	}
	
	/**
	 * Приведение к типу String
	 * @return 
	 */
	@Override
	public String toString(){return name;}

	public Object getObject(){
		Object res=null;
		try {
			Character ch = table.charAt(0);
			String oName = "fait.ferm.persists."+ch.toUpperCase(ch)+table.substring(1);
			Class obj = Class.forName(oName);
			res = obj.newInstance();
			Method loadMethod;
			loadMethod = obj.getMethod("setId", Integer.class);
			loadMethod.invoke(res, id);
		} catch (ClassNotFoundException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (NoSuchMethodException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (SecurityException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (IllegalArgumentException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		} catch (InvocationTargetException ex) {
			Logger.getLogger(SimpleDirItem.class.getName()).log(Level.SEVERE, null, ex);
		}
		return res;
	}

}
